<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
</body>
<script>
    /**
     * 1.因为 【window 对象被复用为 ECMAScript 的 Global 对象】，所以通过 var 声明的所有全局变量和函数都会变成 window 对象的属性和方法。
     * 2.一般来说，定义在全局作用域中变量和函数，它们自动成为了 window 对象的成员(成员变量和成员方法，注意是定义在全局中的变量和函数，也就是非函
     *   数内部定义的变量和方法)。
     * 3.如果在这里使用 let 或 const 替代 var，则不会把变量添加给全局对象(ES6在这方面做了限制)。
     * 4.全局作用域下 this === window (this映射window)。
     * 5.访问未声明的变量(此处应该为未声明的全局变量)会抛出错误，但是可以在 window 对象上查询是否存在可能未声明的变量。(采用查询操作：
     *   window.username判断,故而不会报错)
     * 6.JavaScript 中有很多对象都暴露在全局作用域中，比如 location 和 navigator（本章后面都会讨论），因而它们也是 window 对象的属性
     *
     */
    let userName = 'silly';
    var userAge = 25;
    console.log(window.userName);//undefined 实践发现采用let声明的全局变量没有变成window对象的属性
    console.log(window.userAge);//25
    console.log(this === window);//true
    console.log(this.userAge);//25
    console.log(window.location);//Location {}
</script>
</html>